home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK1.toast / Development Kits (Disc 1) / QuickTime / Programming Stuff / Sample Code / Music Architecture / Mixed Bag / •QTMusic Sample Sequencer / Sequencer Test Movies.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-12-09  |  4.1 KB  |  251 lines  |  [TEXT/KAHL]

  1. /*
  2.  * file: SequencerTest Movies.c
  3.  *
  4.  *
  5.  */
  6.  
  7.  
  8. /*--------------------------
  9.     Inclusions
  10. --------------------------*/
  11.  
  12. #include <QuickDraw.h>
  13. #include <Windows.h>
  14. #include <Memory.h>
  15. #include <Packages.h>
  16. #include <Movies.h>
  17.  
  18. #include "BigEasy2.h"
  19. #include "BigEasyTextish.h"
  20. #include "BigEasyGrafish.h"
  21. #include "BigEasyDialogs.h"
  22.  
  23. #include "SequencerTest.h"
  24. #include "SequencerTest Realtime.h"
  25. #include "SequencerTest Movies.h"
  26.  
  27. #include "Event Priority Queue.h"
  28.  
  29.  
  30. /*--------------------------
  31.     Dead Flesh
  32. --------------------------*/
  33.  
  34.  
  35. void MakeAMIDIMovie(short n,short item, short ref)
  36.     {
  37.     Movie m;
  38.     Track t;
  39.     Media me;
  40.     short refNum;
  41.     OSErr thisError;
  42.     MusicDescription **sdh;
  43.     Handle header;
  44.     TDoc *d;
  45.     Str255 movieName;
  46.     long size;
  47.     StandardFileReply sfr;
  48.     TimeScale ts;
  49.  
  50.     d = &gDoc[n-kFirstDocWindow];
  51.  
  52.     DoTheHeader(d);
  53.  
  54.     CopyPString(movieName,d->docSpec.name);
  55.     ConcatenatePStrings(movieName,"\p.Movie");
  56.  
  57.     StandardPutFile("\pSave Music Movie:",movieName,&sfr);
  58.     if(!sfr.sfGood)
  59.         goto goHome;
  60.  
  61.     thisError = CreateMovieFile(&sfr.sfFile,'TVOD',0,
  62.              createMovieFileDeleteCurFile,
  63.              &refNum,
  64.              &m);
  65.      SetMoviePreferredVolume(m,256);
  66.      SetMovieVolume(m,256);
  67.     t = NewMovieTrack(m,0,0,256);
  68.     TuneGetTimeScale(d->tp,&ts);
  69.     me = NewTrackMedia(t,kMusicComponentType,ts,0,0);
  70.     thisError = GetMoviesError();
  71.  
  72.     header = BuildMusicHeader(d);
  73.     size = sizeof(MusicDescription) + GetHandleSize(header);
  74.  
  75.     sdh = (void *)NewHandleClear(size);
  76.     (**sdh).descSize = size;
  77.     (**sdh).dataFormat = 'musi';
  78.     BlockMove(*header,&(**sdh).headerData,GetHandleSize(header));
  79.  
  80.     thisError = BeginMediaEdits(me);
  81.  
  82.     thisError = AddMediaSample(me,d->qtScore,0,GetHandleSize(d->qtScore),
  83.             kScoreLength,(void *)sdh,
  84.             1,0,0);
  85.  
  86.     thisError = InsertMediaIntoTrack(t,0,0,kScoreLength,(1L<<16));
  87.  
  88.     thisError = EndMediaEdits(me);
  89.  
  90.      thisError = AddMovieResource(m,refNum,nil,nil);
  91.     thisError = CloseMovieFile(refNum);
  92.  
  93. goHome:;
  94.     }
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115. void MakeAFunkyMusicMovie(short n,short item, short ref)
  116.     {
  117.     Movie m;
  118.     Track t;
  119.     Media me;
  120.     short refNum;
  121.     OSErr thisError;
  122.     MusicDescription **sdh;
  123.     Handle header;
  124.     TDoc *d;
  125.     Str255 movieName;
  126.     long size;
  127.     StandardFileReply sfr;
  128.     TimeScale ts;
  129.  
  130.     d = &gDoc[n-kFirstDocWindow];
  131.  
  132.     DoTheHeader(d);
  133.  
  134.     CopyPString(movieName,d->docSpec.name);
  135.     ConcatenatePStrings(movieName,"\p.Movie");
  136.  
  137.     StandardPutFile("\pSave Music Movie:",movieName,&sfr);
  138.     if(!sfr.sfGood)
  139.         goto goHome;
  140.  
  141.     thisError = CreateMovieFile(&sfr.sfFile,'TVOD',0,
  142.              createMovieFileDeleteCurFile,
  143.              &refNum,
  144.              &m);
  145.      SetMoviePreferredVolume(m,256);
  146.      SetMovieVolume(m,256);
  147.     t = NewMovieTrack(m,0,0,256);
  148.     TuneGetTimeScale(d->tp,&ts);
  149.     me = NewTrackMedia(t,kMusicComponentType,ts,0,0);
  150.     thisError = GetMoviesError();
  151.  
  152.     header = BuildMusicHeader(d);
  153.     size = sizeof(MusicDescription) + GetHandleSize(header);
  154.  
  155.     sdh = (void *)NewHandleClear(size);
  156.     (**sdh).descSize = size;
  157.     (**sdh).dataFormat = 'musi';
  158.     BlockMove(*header,&(**sdh).headerData,GetHandleSize(header));
  159.  
  160.     thisError = BeginMediaEdits(me);
  161.  
  162.     thisError = AddMediaSample(me,d->qtScore,0,GetHandleSize(d->qtScore),
  163.             kScoreLength,(void *)sdh,
  164.             1,0,0);
  165.  
  166.     thisError = InsertMediaIntoTrack(t,-1,0,kScoreLength,(2L<<16));
  167.  
  168.     thisError = EndMediaEdits(me);
  169.  
  170.      thisError = AddMovieResource(m,refNum,nil,nil);
  171.     thisError = CloseMovieFile(refNum);
  172.  
  173. goHome:;
  174.     }
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206. #define kNoteRequestMessageSize sizeof(NoteRequest)/4 + 2
  207.  
  208. Handle BuildMusicHeader(TDoc *d)
  209.     {
  210.     Handle header;
  211.     unsigned long size;
  212.     short i;
  213.     NoteRequest *nr;
  214.     unsigned long *w;
  215.  
  216.     size = kScoreParts*(8 + sizeof(NoteRequest)) + 4; 
  217.     /* 8 bytes for general music message, 
  218.      * + 4 for end marker
  219.      */
  220.  
  221.     header = (void *)NewHandleClear(size);
  222.     if(!header)
  223.         goto goHome;
  224.  
  225.     w = (unsigned long *)*header;
  226.  
  227.     for(i = 0; i < kScoreParts; i++)
  228.         {
  229.         _StuffGeneralEvent(*w,*(w + kNoteRequestMessageSize - 1),
  230.                 i,kGeneralEventNoteRequest,kNoteRequestMessageSize);
  231.         nr = (NoteRequest *)(w + 1);
  232.  
  233.         nr->polyphony = 3;
  234.         nr->typicalPolyphony = 0x30000;
  235.  
  236.  
  237.         nr->polyphony = 1;
  238.         nr->typicalPolyphony = 0x10000;
  239.  
  240.         nr->tone = d->sr.score[i].tone;
  241.  
  242.         w += kNoteRequestMessageSize;
  243.         }
  244.  
  245.     *w++ = 0x60000000;                        /* end marker */
  246.  
  247. goHome:
  248.     return header;
  249.     }
  250.  
  251.